﻿package common;

public class Page {
	public static final int PAGE_SCALE = 10; // 페이지당 게시물수
	public static final int BLOCK_SCALE = 10; // 블록당 페이지수
	private int curPage; // 현재 페이지 번호
	private int prevPage; // 이전페이지
	private int nextPage; // 다음페이지
	private int totPage; // 전체 페이지 갯수
	private int curBlock; // 현재 블록 번호
	private int totBlock; // 전체 블록 갯수
	private int pageBegin; // 페이지 내에서의 시작 번호
	private int pageEnd; // 페이지 내에서의 끝번호
	private int blockStart; // 블럭 내에서의 시작페이지 번호
	private int blockEnd; // 블럭 내에서의 끝페이지 번호

	// 생성자
	public Page(int count, int curPage) {
		this.curBlock = 1;
		this.curPage = curPage;
		// 전체페이지 갯수를 세팅함
		setTotPage(count);
		// 현재 페이지의 시작~끝번호 설정
		setPageRange();
		// 전체블록 갯수를 계산
		setTotBlock();
		// 현재 블록의 시작페이지,끝페이지를 세팅함
		setBlockRange();
		// System.out.println(
		// "생성자-현재페이지 : "+this.curPage+"/현재블록 : "+this.curBlock+"/시작 : "+this.blockStart+"/ 끝 ;"+
		// blockEnd+" / 전체페이지 : "+this.totPage);
	}

	// 전체페이지 갯수 계산
	public void setTotPage(int count) {
		// out.println "갯수 : intNum<br>";
		this.totPage = (int) Math.ceil(count * 1.0 / PAGE_SCALE);
		// System.out.println(
		// "setTotPage-현재페이지 : "+this.curPage+"/현재블록 : "+this.curBlock+"/시작 : "+this.blockStart+"/ 끝 ;"+
		// blockEnd+" / 전체페이지 : "+this.totPage);
	}

	public void setPageRange() {
		this.pageBegin = (this.curPage - 1) * PAGE_SCALE + 1; // 시작번호 설정
		this.pageEnd = this.pageBegin + PAGE_SCALE - 1; // 현재 페이지 마지막번호
		// if( this.pageEnd > this.totPage ) this.pageEnd = this.totPage;
		// System.out.println("현재페이지:"+this.curPage+"/시작레코드:"+this.pageBegin+"/끝레코드:"+this.pageEnd);
		// System.out.println(
		// "setTotPage-현재페이지 : "+this.curPage+"/현재블록 : "+this.curBlock+"/시작 : "+this.blockStart+"/ 끝 ;"+
		// blockEnd+" / 전체페이지 : "+this.totPage);
	}

	// 전체 블록 갯수 계산
	public void setTotBlock() {
		this.totBlock = (int) Math.ceil(this.totPage / Page.BLOCK_SCALE);
		// out.println "갯수 : this.totBlock<br>";
		// System.out.println(
		// "setTotBlock-현재페이지 : "+this.curPage+"/현재블록 : "+this.curBlock+"/시작 : "+this.blockStart+"/ 끝 ;"+
		// blockEnd+" / 전체페이지 : "+this.totPage);
	}

	// 현재 블록을 설정함
	public void setBlockRange() {
		this.curBlock = (int) Math.ceil((this.curPage - 1) / Page.BLOCK_SCALE) + 1;
		this.blockStart = (this.curBlock - 1) * Page.BLOCK_SCALE + 1; // 시작번호 설정
		this.blockEnd = this.blockStart + Page.BLOCK_SCALE - 1;
		// 마지막 페이지가 범위를 초과할 경우의 처리
		if (this.blockEnd > this.totPage) {
			this.blockEnd = this.totPage;
		}
		// 현재 블록이 1이면 이전 페이지를 1로 세팅함
		this.prevPage = (this.curBlock == 1) ? 1
				: ((this.curBlock - 1) * Page.BLOCK_SCALE);
		// 현재 블록이 마지막 블록이면 다음 페이지도 마지막 페이지 번호로 세팅함
		this.nextPage = (this.curBlock > this.totBlock) ? (this.curBlock * Page.BLOCK_SCALE)
				: (this.curBlock * Page.BLOCK_SCALE) + 1;
		if (this.nextPage >= this.totPage) {
			this.nextPage = this.totPage;
		}
		// System.out.println(
		// "setBlockRange-현재페이지 : "+this.curPage+"/현재블록 : "+this.curBlock+"/시작 : "+this.blockStart+"/ 끝 ;"+
		// blockEnd+" / 전체페이지 : "+this.totPage);
	}

	// 페이지의 시작레코드 번호 계산
	public int getPageBegin() {
		return this.pageBegin;
	}

	// 페이지의 끝레코드 번호 계산
	public int getPageEnd() {
		return this.pageEnd;
	}

	// 설정된 현재페이지를 가져옴
	public int getCurPage() {
		return this.curPage;
	}

	// 설정된 현재블록을 가져옴
	public int getCurBlock() {
		return this.curBlock;
	}

	// 블록 시작번호를 가져옴
	public int getBlockStart() {
		return this.blockStart;
	}

	// 블록 끝번호를 가져옴
	public int getBlockEnd() {
		return this.blockEnd;
	}

	// 페이지 네비게이션을 화면에 뿌려줌
	public String putPageRange() {
		String pageList = "";
		// 첫번째 페이지의 링크( 1페이지가 아닐 때 보여줌 )
		if (this.curPage > 1) {
			pageList += "<a href='#' onclick=\"javascript:recipe_list('1')\">[처음]</a>&nbsp;... ";
		}
		// 이전 블록 페이지의 링크(1블록이 아닐 때 보여줌)
		if (this.curBlock > 1) {
			pageList += "<a href='#' onclick=\"javascript:recipe_list('"+this.prevPage+"')\">[이전]</a>&nbsp;";
		}

		for (int pageNum = this.blockStart; pageNum <= this.blockEnd; pageNum++) {
			// 현재 페이지인 경우 링크는 없고 보기쉽게 모양을 다르게 설정
			if (pageNum == this.curPage) {
				pageList += "<font size='3' color='red'><b>[" + pageNum
						+ "]</b>&nbsp;</font>";
			} else {
				pageList += "<a href='#' onclick=\"javascript:recipe_list('"+pageNum+"')\">[" + pageNum
						+ "]</a>&nbsp;";
			}
		}
		// 다음 블록 링크( 현재 블록이 마지막 블록이 아닐 때만 보여줌 )
		if (this.curBlock <= this.totBlock) {
			pageList += "&nbsp;<a href='#' onclick=\"javascript:recipe_list('"+this.nextPage+"')\">[다음]</a>";
		}
		// 마지막 페이지 링크( 끝페이지가 아닐 때 보여줌 )
		if (this.curPage < this.totPage) {
			pageList += " ...&nbsp;<a href='#' onclick=\"javascript:recipe_list('"+this.totPage+"')\">[끝("
					+ this.totPage + ")]</a>&nbsp;";
		}
		/*System.out.println("putPageRange-현재페이지 : " + this.curPage + "/현재블록 : "
				+ this.curBlock + "/시작 : " + this.blockStart + "/ 끝 ;" + blockEnd
				+ " / 전체페이지 : " + this.totPage + "/시작레코드 : " + this.pageBegin
				+ "/ 끝레코드 ;" + pageEnd);*/
		// System.out.println(pageList);
		return pageList;
	}
}
